﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Collections;

namespace SGT_ON
{
    [Serializable]
    [System.ComponentModel.DataObject]
    public class ONFoto
    {
        //private int _id;
        private string _nombre;
        private string _nombreArchivo;
        private string _carpeta;
        private string _uri;
        private string _rutaFisica;
                
        /// <summary>
        /// Devuelve el nombre del archivo sin extensión y sin ruta.
        /// </summary>
        public string Nombre
        {
            get
            {
                return _nombre;
            }
            set
            {
                _nombre = value;
            }
        }
        /// <summary>
        /// Devuelve el nombre del archivo con extensión.
        /// </summary>
        public string NombreArchivo
        {
            get
            {
                return _nombreArchivo;
            }
            set
            {
                _nombreArchivo = value;
            }
        }
        /// <summary>
        /// Devuelve la ruta completa de la carpeta donde se encuentra el archivo.
        /// </summary>
        public string Carpeta
        {
            get
            {
                return _carpeta;
            }
            set
            {
                _carpeta = value;
            }
        }
        /// <summary>
        /// Devuelve la ruta completa de la carpeta donde se encuentra el archivo con el nombre del archivo y la extensión.
        /// </summary>
        public string Uri
        {
            get
            {
                return _uri;
            }
            set
            {
                _uri = value;
            }
        }
        /// <summary>
        /// Devuelve la ruta del archivo en 
        /// </summary>
        public string RutaFisica
        {
            get
            {
                return _rutaFisica;
            }
            set
            {
                _rutaFisica = value;
            }
        }

        public static void EliminarFoto(ONFoto pFoto)
        {
            File.Delete(pFoto._rutaFisica);
        }
    }

    [Serializable]
    [System.ComponentModel.DataObject]
    public class ONFotoColeccion : System.Collections.CollectionBase
    {
        #region Metodos de manejo de colección básicos
        public void Remove(int index)
        {
            if (index <= Count - 1 || index >= 0)
            {
                this.List.RemoveAt(index);
            }
            else
            {
                throw new System.ArgumentException("Fuera de rango", "original");
            }
        }
        public ONFoto this[int index]
        {
            get { return ((ONFoto)(this.List[index])); }
            set { this.List[index] = value; }
        }
        #endregion

        public static ONFotoColeccion ObtenerColeccionDeFotos(int pID, string pCarpeta)
        {
            string _carpeta = pCarpeta;
            ONFotoColeccion _resultado = new ONFotoColeccion();
            ONFoto _foto;
            
            int _id = pID;

            if ((_id <= 0) || (pCarpeta == "")) return _resultado;

            System.Collections.ArrayList _lista = new ArrayList();

            System.IO.FileInfo[] _archivos;

            if (Directory.Exists(_carpeta) == false) // si no existe lo devuelvo vacio.
                return _resultado;

            _archivos = new DirectoryInfo(_carpeta).GetFiles("*.jpg");

            foreach (System.IO.FileInfo _archivo in _archivos)
            {
                _foto = new ONFoto();
                _foto.Nombre = _archivo.Name.Substring(0, _archivo.Name.IndexOf("."));
                _foto.NombreArchivo = _archivo.Name;
                _foto.Uri = "~/Fotos/" + _id.ToString() + "/" + _archivo.Name;
                _foto.Carpeta = _archivo.Directory.FullName;
                _foto.RutaFisica = _archivo.FullName;
                _resultado.List.Add(_foto);
                //_lista.Add("~/Fotos/" + _id.ToString() + "/" + _archivo.Name);

            }

            return _resultado;
        }

        public static int ObtenerCantidadDeFotos(int pID)
        {
            string _carpeta = AppDomain.CurrentDomain.BaseDirectory + "Fotos\\" + pID.ToString();
            int _resultado = 0;
            int _id = pID;

            if ((_id <= 0) || (_carpeta == "")) return _resultado;

            System.IO.FileInfo[] _archivos;

            if (Directory.Exists(_carpeta) == false) // si no existe lo devuelvo vacio.
                return _resultado;

            _archivos = new DirectoryInfo(_carpeta).GetFiles("*.jpg");
            _resultado = _archivos.GetLength(0);

            //foreach (System.IO.FileInfo _archivo in _archivos)
            //{               

            //}

            return _resultado;
        }

        public static void Eliminar(ONFoto pFoto)
        {
            ONFoto.EliminarFoto(pFoto);
        }
    }
}
